/*
 * @Author: szx
 * @Date: 2022-04-01 15:11:21
 * @LastEditTime: 2022-04-01 15:14:34
 * @Description:
 * @FilePath: \leetcode\剑指offerII\018\018.js
 */
/**
 * @param {string} s
 * @return {boolean}
 */
var isPalindrome = function (s) {
    let i = 0,
        j = s.length - 1;
    // 是否是数字或字母
    const isLetterOrDigit = (code) => {
        if (
            // 大写字母
            (code >= 97 && code <= 122) ||
            // 小写字母
            (code >= 65 && code <= 90) ||
            // 数字
            (code >= 48 && code <= 57)
        ) {
            return true;
        }
        return false;
    };
    while (i < j) {
        let ch1 = s.charCodeAt(i),
            ch2 = s.charCodeAt(j);
        if (!isLetterOrDigit(ch1)) {
            i++;
        } else if (!isLetterOrDigit(ch2)) {
            j--;
        } else {
            // 两个指针所指向的内容都是字母或数字
            ch1 = s[i].toLowerCase();
            ch2 = s[j].toLowerCase();
            // 题目要求的是忽略字母的大小写
            if (ch1 != ch2) {
                return false;
            }
            i++;
            j--;
        }
    }
    return true;
};
